#pragma once
#include<sys/types.h>
#include<cstdio>
#include<unistd.h>
#include<iostream>
#include<signal.h>
#include<sys/stat.h>
#include<fcntl.h>
#include"Log.hpp"
using namespace LogMoudle;
//将服务进行守护进程化的服务
const std::string dev="/dev/null";
void Daemon(){
    //忽略信号
    signal(SIGPIPE,SIG_IGN);
    signal(SIGCHLD,SIG_IGN);
    if(fork()>0)
        //父进程退出
        exit(0);
    //子进程继续，孤儿进程，父进程就是1
    setsid();
    //守护进程不要重键盘输入也不需要向显示器打印
    //方法一：关闭0,1,2（不推荐）
    //方法二：打开/dev/null将标准0,1,2重定向到/dev/null
    int fd=open(dev.c_str(),O_RDWR);
    if(fd<0){
        LOG(LogLevel::FATAL)<<"打开"<<dev<<"失败";
        exit(1);
    }
    else{
        dup2(fd,0);
        dup2(fd,1);
        dup2(fd,2);
        close(fd);
    }
}